package com.ruoyi.Utils;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.ArrayList;
import java.util.List;
import java.net.URL;
import java.net.MalformedURLException;

public class H5Util {

    /**
     * 从HTML源码中提取所有图片URL
     * @param html HTML字符串
     * @param baseUrl 基础URL，用于拼接相对路径的图片地址（如为null则不处理相对路径）
     * @return 图片URL列表
     */
    public static List<String> getAllImg(String html, String baseUrl) {
        List<String> imgList = new ArrayList<>();
        if (html == null || html.trim().isEmpty()) {
            return imgList;
        }

        // 使用Jsoup解析HTML
        Document doc = Jsoup.parse(html);

        // 查找所有img标签
        Elements imgElements = doc.select("img");

        for (Element img : imgElements) {
            // 常见的图片URL属性：src, data-src, data-original, data-img-url
            String imgUrl = getImgUrlFromAttributes(img);

            if (imgUrl != null && !imgUrl.trim().isEmpty()) {
                // 处理相对路径
                if (baseUrl != null && !imgUrl.startsWith("http://") && !imgUrl.startsWith("https://")) {
                    imgUrl = resolveRelativeUrl(baseUrl, imgUrl);
                }

                // 去重添加
                if (!imgList.contains(imgUrl)) {
                    imgList.add(imgUrl);
                }
            }
        }

        return imgList;
    }

    /**
     * 从img标签的各种属性中获取图片URL
     */
    private static String getImgUrlFromAttributes(Element img) {
        // 优先检查懒加载属性
        String url = img.attr("data-src");
        if (url.isEmpty()) {
            url = img.attr("data-original");
        }
        if (url.isEmpty()) {
            url = img.attr("data-img-url");
        }
        // 最后检查标准src属性
        if (url.isEmpty()) {
            url = img.attr("src");
        }
        return url;
    }

    /**
     * 解析相对URL，拼接成完整URL
     */
    private static String resolveRelativeUrl(String baseUrl, String relativeUrl) {
        try {
            URL base = new URL(baseUrl);
            URL absolute = new URL(base, relativeUrl);
            return absolute.toString();
        } catch (MalformedURLException e) {
            // 处理URL格式错误，返回原始相对路径
            return relativeUrl;
        }
    }

    /**
     * 简化调用方法，不处理相对路径
     */
    public static List<String> getAllImg(String html) {
        return getAllImg(html, null);
    }
}
